/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is Forte for Java, Community Edition. The Initial
* Developer of the Original Code is Sun Microsystems, Inc. Portions
* Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.web.wizards.beanjsp.model;
import org.netbeans.modules.web.wizards.beanjsp.util.*;
import org.netbeans.modules.web.wizards.beanjsp.ide.netbeans.*;
import org.netbeans.modules.web.wizards.beanjsp.ui.*;
import org.netbeans.modules.web.util.*;
// import com.sun.jasper.webapp.ide.netbeans.*;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import javax.swing.event.*;
import javax.swing.*;
import javax.swing.table.*;
import java.util.*;
import java.io.*;
import java.lang.reflect.*;
import java.beans.*;
public class JSPPage extends Object {
public static final int DUMB_PAGE = 0;
public static final int INPUT_PAGE = 1;
public static final int RESULT_PAGE = 2;
public static final int IO_PAGE = 3;
public static final int ERROR_PAGE = 4;
public static final int ERR_IN_PAGE = 5;
public static final int ERR_OUT_PAGE = 6;
public static final int ERR_IO_PAGE = 7;
public static BeanManager beanManager = new BeanManager();
private boolean valid;
private String jspName;
private int pageID = IO_PAGE;
private JSPVector useBeans;
private JSPVector inputFields;
private JSPVector bizMethods;
private JSPVector resultFields;
private JSPPageTemplate pageTemplate;
private String submitURL;
private String errorURL;
private String submitButtonLabel;
private String pageTemplateName;
private int pageFormStyleName;
private JSPItemListModel beansModel;
private JSPItemListModel methodsModel;
private JSPItemListModel setterFieldsModel;
private JSPItemListModel getterFieldsModel;
private JSPBeanTableModel useBeansModel;
private JSPItemListModel bizMethodsModel;
private JSPInputFieldTableModel jspInputFieldsModel;
private JSPDisplayFieldTableModel jspDisplayFieldsModel;
boolean errorPage = false;
boolean submitAllowed = true;
boolean submitProcessed = true;
boolean overwrite = false;
public JSPPage() {
this(DUMB_PAGE);
}
public JSPPage(int pageID) {
valid = true;
this.pageID = pageID;
jspName = getDefaultPageName(pageID);
useBeans = new JSPVector();
bizMethods = new JSPVector();
inputFields = new JSPVector();
resultFields = new JSPVector();
pageTemplate = new JSPPageTemplate();
pageTemplateName = JSPPageTemplate.DEF_JSPPAGE_TLT;
pageFormStyleName = HTMLForm.FS_COLUMN;
submitURL = ""; // NOI18N
errorURL = ""; // NOI18N
submitButtonLabel="Submit"; // NOI18N
overwrite = false;
initializeModels();
}
private String getDefaultPageName(int pageID) {
switch (pageID) {
case DUMB_PAGE : return "JSPPage"; // NOI18N
case INPUT_PAGE : return "InputPage"; // NOI18N
case RESULT_PAGE : return "ResultPage"; // NOI18N
case ERROR_PAGE : return "ErrorPage"; // NOI18N
case IO_PAGE : return "JSPPage"; // NOI18N
default : return "JSPPage"; // NOI18N
}
}
/** Returns JSP name */
public String getJSPName() {
return jspName;
}
/** Sets JSP name */
public void setJSPName(String name) {
this.jspName = name;
}
public int getPageID() { return pageID; }
public void setPageID(int pageID) { this.pageID = pageID; }
public boolean isValid() {
return valid;
}
public void setValid(boolean valid) {
this.valid = valid;
}
public String getSubmitURL() { return submitURL;}
public void setSubmitURL(String submitURL) { this.submitURL = submitURL;}
public String getSubmitButtonLabel() { return submitButtonLabel;}
public void setSubmitButtonLabel(String submitButtonLabel) { this.submitButtonLabel = submitButtonLabel;}
public String getErrorURL() { return errorURL;}
public void setErrorURL(String errorURL) { this.errorURL = errorURL;}
public String getPageTemplateName() { return pageTemplateName; }
public void setPageTemplateName(String pageTemplateName) { this.pageTemplateName = pageTemplateName; }
public int getPageFormStyleName() { return pageFormStyleName; }
public void setPageFormStyleName(int pageFormStyleName) { this.pageFormStyleName = pageFormStyleName; }
//// new properties
public boolean isErrorPage() { return errorPage; }
public void setErrorPage(boolean errorPage) { this.errorPage = errorPage;}
public boolean isSubmitAllowed() { return submitAllowed; }
public void setSubmitAllowed(boolean submitAllowed) { this.submitAllowed = submitAllowed;}
public boolean isSubmitProcessed() { return submitProcessed; }
public void setSubmitProcessed(boolean submitProcessed) { this.submitProcessed = submitProcessed;}
public boolean isOverwrite() { return this.overwrite;}
public void setOverwrite(boolean overwrite) { this.overwrite = overwrite;}
//// beans managing
public void addJSPBean(JSPBean jspBean) {
this.useBeans.add(jspBean);
}
public void removeJSPBean(JSPBean jspBean) {
this.useBeans.remove(jspBean);
}
public void addJSPBeanMethod(JSPBeanMethod jspBeanMethod) {
this.bizMethods.add(jspBeanMethod);
}
public void removeJSPBeanMethod(JSPBeanMethod jspBeanMethod) {
this.bizMethods.remove(jspBeanMethod);
}
public void addInputField(JSPBeanField jspBeanField) {
this.inputFields.add(jspBeanField);
}
public void removeInputField(JSPBeanField jspBeanField) {
this.inputFields.remove(jspBeanField);
}
public void addResultField(JSPBeanField jspBeanField) {
this.resultFields.add(jspBeanField);
}
public void removeResultField(JSPBeanField jspBeanField) {
this.resultFields.remove(jspBeanField);
}
//// model management
public void initializeModels() {
beansModel = new JSPItemListModel();
methodsModel = new JSPItemListModel();
setterFieldsModel = new JSPItemListModel();
getterFieldsModel = new JSPItemListModel();
useBeansModel = new JSPBeanTableModel(this.useBeans);
bizMethodsModel = new JSPItemListModel(this.bizMethods);
jspInputFieldsModel = new JSPInputFieldTableModel(this.inputFields);
jspDisplayFieldsModel = new JSPDisplayFieldTableModel(this.resultFields);
useBeansModel.addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent evt) {
if(evt instanceof JSPBeanTableModel.JSPBeanTableModelEvent) {
if(evt.getType() == TableModelEvent.DELETE) {
JSPBean jspBean = ((JSPBeanTableModel.JSPBeanTableModelEvent)evt).getJSPBean();
removeFieldsAndMethods(jspBean);
}else if(evt.getType() == TableModelEvent.INSERT) {
JSPBean jspBean = ((JSPBeanTableModel.JSPBeanTableModelEvent)evt).getJSPBean();
addFieldsAndMethods(jspBean);
}
}
}
});
}
private void addFieldsAndMethods(JSPBean jspBean) {
// remove fields and methods from usebean fields & methods list
// and add it to available beans fields & methods list
// Debug.println("adding the Fields and Methods for Bean : "+jspBean.getBeanName());
JSPVector setterFields = (JSPVector)JSPPage.beanManager.getValidJSPBeanSetterFields(jspBean);
JSPVector getterFields = (JSPVector)JSPPage.beanManager.getValidJSPBeanGetterFields(jspBean);
JSPVector beanMethods = (JSPVector)JSPPage.beanManager.getValidJSPBeanMethods(jspBean);
methodsModel.addItems(beanMethods);
setterFieldsModel.addItems(setterFields);
getterFieldsModel.addItems(getterFields);
}
private void removeFieldsAndMethods(JSPBean jspBean) {
if(jspBean == null) {
// Debug.println("Removing All Fields and Methods...");
bizMethodsModel.removeAll();
jspInputFieldsModel.removeAll();
jspDisplayFieldsModel.removeAll();
methodsModel.removeAll(jspBean);
setterFieldsModel.removeAll();
getterFieldsModel.removeAll();
} else {
// Debug.println("removing the Fields and Methods for Bean : "+jspBean.getBeanName());
bizMethodsModel.removeAll(jspBean);
jspInputFieldsModel.removeAll(jspBean);
jspDisplayFieldsModel.removeAll(jspBean);
methodsModel.removeAll(jspBean);
setterFieldsModel.removeAll(jspBean);
getterFieldsModel.removeAll(jspBean);
}
}
public JSPItemListModel getAvailableBeansModel() {
return this.beansModel;
}
public JSPItemListModel getAvailableBeanMethodsModel() {
return this.methodsModel;
}
public JSPItemListModel getAvailableSetterFieldsModel() {
return this.setterFieldsModel;
}
public JSPItemListModel getAvailableGetterFieldsModel() {
return this.getterFieldsModel;
}
public JSPBeanTableModel getJSPBeansModel() {
return this.useBeansModel;
}
public JSPDisplayFieldTableModel getJSPDisplayFieldsModel() {
return this.jspDisplayFieldsModel;
}
public JSPInputFieldTableModel getJSPInputFieldsModel() {
return this.jspInputFieldsModel;
}
public JSPItemListModel getBizMethodsModel() {
return this.bizMethodsModel;
}
public void loadBeansList(JSPVector availableBeans) {
useBeansModel.removeAll();
bizMethodsModel.removeAll();
jspInputFieldsModel.removeAll();
jspDisplayFieldsModel.removeAll();
beansModel.removeAll();
methodsModel.removeAll();
setterFieldsModel.removeAll();
getterFieldsModel.removeAll();
Iterator beansIterator = availableBeans.iterator();
for(;beansIterator.hasNext();) {
JSPBean jspBean = (JSPBean)((JSPBean)beansIterator.next()).clone();
beansModel.add(jspBean);
}
}
public void updatePageType() {
int type = this.getPageID();
if(this.isErrorPage()) {
if(this.isSubmitAllowed() && this.isSubmitProcessed()){
this.setPageID(this.ERR_IO_PAGE);
} else if(this.isSubmitAllowed()&& !this.isSubmitProcessed() ) {
this.setPageID(this.ERR_IN_PAGE);
} else if(!this.isSubmitAllowed() && this.isSubmitProcessed() ) {
this.setPageID(this.ERR_OUT_PAGE);
} else {
this.setPageID(this.ERROR_PAGE);
}
} else {
if(this.isSubmitAllowed() && this.isSubmitProcessed()){
this.setPageID(this.IO_PAGE);
} else if(this.isSubmitAllowed()&& !this.isSubmitProcessed() ) {
this.setPageID(this.INPUT_PAGE);
} else if(!this.isSubmitAllowed()&& this.isSubmitProcessed() ) {
this.setPageID(this.RESULT_PAGE);
} else {
this.setPageID(this.DUMB_PAGE);
}
}
}
//// add init info to use bean
public void updateUseBeanInitProperties() {
Iterator iterator = this.resultFields.iterator();
for(; iterator.hasNext(); ) {
JSPBeanField initField = (JSPBeanField)iterator.next();
//// make sure no duplicates for this
initField.selfPopulateToUseBeanInitProperties();
}
}
//// Code generation Methods
public void writePageDirective(PrintWriter jspWriter) {
switch(this.getPageID()) {
case ERROR_PAGE :
case ERR_IN_PAGE:
case ERR_OUT_PAGE:
case ERR_IO_PAGE:
jspWriter.println("<%@ page isErrorPage=\"true\" %> \n"); // NOI18N
break;
default:
String errorURL = this.getErrorURL();
if(errorURL != null && errorURL.trim().length() > 0 ) {
jspWriter.println("<%@ page errorPage=\""+this.getErrorURL()+"\" %> \n"); // NOI18N
}
break;
}
}
public void writeInstantiateJSPBeans(PrintWriter jspWriter) {
////todo: make sure that you are not calling this multiple times
updateUseBeanInitProperties();
jspWriter.println();
Iterator beansIterator = useBeans.iterator();
for(; beansIterator.hasNext(); ) {
JSPBean jspBean = (JSPBean)beansIterator.next();
jspWriter.println(jspBean.toJSPCode());
}
jspWriter.println();
}
public void writeProcessInputData(PrintWriter jspWriter){
jspWriter.println();
Iterator iterator = this.inputFields.iterator();
for(; iterator.hasNext(); ) {
JSPBeanField jspBeanField = (JSPBeanField)iterator.next();
jspWriter.println(jspBeanField.toSubmitProcessJSPCode());
}
jspWriter.println();
}
public void writeExecuteBusinessLogicMethods(PrintWriter jspWriter){
jspWriter.println();
Iterator iterator = this.bizMethods.iterator();
for(; iterator.hasNext(); ) {
JSPBeanMethod jspBeanMethod = (JSPBeanMethod)iterator.next();
jspWriter.println(jspBeanMethod.toJSPCode());
}
jspWriter.println();
}
public void writeDynamicForm(PrintWriter jspWriter){
jspWriter.println();
String submitLink = this.getSubmitURL();
String submitValue = this.getSubmitButtonLabel();
switch(this.getPageID()){
case INPUT_PAGE:
case IO_PAGE:
case ERR_IN_PAGE:
case ERR_IO_PAGE:
jspWriter.println("<form name=\""+this.getJSPName()+"Form\""+ " method=post "+ // NOI18N
"action=\""+submitLink+"\" >"); // NOI18N
break;
default :
jspWriter.println("<form name=\""+this.getJSPName()+"Form\"" + " >"); // NOI18N
break;
}
////todo: PLEASE implement this layout junk in HTMLForm
// Debug.println(" Form Layout : "+this.pageFormStyleName);
if(this.pageFormStyleName == HTMLForm.FS_COLUMN) {
jspWriter.println("<table border=0 cols=2 width=\"100%\" >"); // NOI18N
}else if(this.pageFormStyleName == HTMLForm.FS_GRID_2) {
jspWriter.println("<table border=0 cols=4 width=\"100%\" >"); // NOI18N
} else {
// NO LAYOUT
// jspWriter.println("<TABLE BORDER=0 COLS=2 WIDTH=\"100%\" >");
}
Iterator iterator = this.resultFields.iterator();
if(this.pageFormStyleName == HTMLForm.FS_COLUMN) {
for(; iterator.hasNext(); ) {
jspWriter.println("<tr>"); // NOI18N
JSPBeanField jspBeanField = (JSPBeanField)iterator.next();
jspWriter.println(jspBeanField.toFormJSPCode(true));
jspWriter.println("</tr>"); // NOI18N
}
} else if(this.pageFormStyleName == HTMLForm.FS_GRID_2) {
int cols = 0;
for(; iterator.hasNext(); ) {
if(cols == 0) {
jspWriter.println("<tr>"); // NOI18N
}
JSPBeanField jspBeanField = (JSPBeanField)iterator.next();
jspWriter.println(jspBeanField.toFormJSPCode(true));
++cols;
if(cols == 2) {
jspWriter.println("</tr>"); // NOI18N
cols = 0;
}
}
} else {
for(; iterator.hasNext(); ) {
JSPBeanField jspBeanField = (JSPBeanField)iterator.next();
jspWriter.println(jspBeanField.toFormJSPCode(false));
}
}
switch(this.getPageID()){
case INPUT_PAGE:
case IO_PAGE:
case ERR_IN_PAGE:
case ERR_IO_PAGE:
if(this.pageFormStyleName == HTMLForm.FS_COLUMN ) {
jspWriter.println("<tr><td> </td><td><input type=submit value=\""+submitValue+"\" ></td></tr>"); // NOI18N
} else if(this.pageFormStyleName == HTMLForm.FS_GRID_2) {
jspWriter.println("<tr><td> </td><td><input type=submit value=\""+submitValue+"\" ></td></tr>"); // NOI18N
}else {
// NO Layout
jspWriter.println(" <input type=submit value=\""+submitValue+"\" >"); // NOI18N
}
break;
default :
break;
}
if(this.pageFormStyleName != HTMLForm.FS_NOLAYOUT) {
jspWriter.println("</table>"); // NOI18N
}
jspWriter.println("</form>"); // NOI18N
jspWriter.println();
}
public void writeDynamicContent() {
try {
// Debug.println("Preparing Dynamic Contnet...");
// Debug.println("Writing JSP with Type: "+this.getPageID());
pageTemplate = new JSPPageTemplate();
//NB String templateFileName = pageTemplate.getPageTemplateFileName(this.getPageTemplateName());
//NB pageTemplate.loadTemplateData(pageTemplate.getTemplateReader(templateFileName));
switch( this.getPageID()){
case ERROR_PAGE:
case ERR_IN_PAGE:
case ERR_OUT_PAGE:
case ERR_IO_PAGE:
pageTemplate.loadTemplateData(pageTemplate.getDefaultErrorPageTemplate());
break;
default:
pageTemplate.loadTemplateData(pageTemplate.getDefaultTemplate());
break;
}
writePageDirective(pageTemplate.getPageDirectiveWriter());
writeInstantiateJSPBeans(pageTemplate.getUseBeanWriter());
switch( this.getPageID()){
case RESULT_PAGE:
case IO_PAGE:
case ERR_OUT_PAGE:
case ERR_IO_PAGE:
writeProcessInputData(pageTemplate.getInputDataWriter());
break;
default:
break;
}
writeExecuteBusinessLogicMethods(pageTemplate.getBizMethodsWriter());
writeDynamicForm(pageTemplate.getDynamicFormWriter());
// pageTemplate.saveAsInRepository(this.getJSPName(),"jsp",this.isOverwrite());
}catch(Exception ex) {Debug.print(ex);}
}
public void saveInRepository() {
try {
writeDynamicContent();
if(JSPPageWizard.doNonVoidMethodWarning) {
IDEHelper.showWarningMessageI18N("JBW_NonVoidParamsInMethodsWarning"); // NOI18N
JSPPageWizard.doNonVoidMethodWarning = false;
}
// Debug.println("Writing JSP File to the Repository...");
pageTemplate.saveAsInRepository(this.getJSPName(),"jsp",this.isOverwrite()); // NOI18N
}catch(Exception ex) {Debug.print(ex);}
}
public void saveToFile() {
try {
writeDynamicContent();
File jspFile = new File(this.getJSPName()+".jsp"); // NOI18N
// Debug.println("Writing JSP File to File System...");
pageTemplate.saveAs(jspFile);
}catch(Exception ex) {Debug.print(ex);}
}
public static void main(String[] args) {
if(Debug.TEST) {
try {
String beanClassName = "jspbeans.SampleBean"; // NOI18N
if(args.length > 0 )
beanClassName = args[0];
JSPBean jspBean = (JSPBean)JSPPage.beanManager.createJSBBean(Class.forName(beanClassName));
JSPVector jspMethods = (JSPVector)JSPPage.beanManager.getValidJSPBeanMethods(jspBean);
JSPVector jspDisplayFields = (JSPVector)JSPPage.beanManager.getValidJSPBeanGetterFields(jspBean);
JSPVector jspInpitFields = (JSPVector)JSPPage.beanManager.getValidJSPBeanSetterFields(jspBean);
JSPPage errorPage = new JSPPage(JSPPage.ERROR_PAGE);
errorPage.setErrorPage(true);
errorPage.setOverwrite(true);
errorPage.saveToFile();
JSPPage ioPage = new JSPPage();
ioPage.addJSPBean(jspBean);
for(int i=0; i < jspMethods.size(); ++i) {
ioPage.addJSPBeanMethod((JSPBeanMethod)jspMethods.elementAt(i));
}
for(int i=0; i < jspDisplayFields.size(); ++i) {
ioPage.addResultField((JSPBeanField)jspDisplayFields.elementAt(i));
}
for(int i=0; i < jspInpitFields.size(); ++i) {
ioPage.addInputField((JSPBeanField)jspInpitFields.elementAt(i));
}
ioPage.setSubmitAllowed(true);
ioPage.setSubmitProcessed(true);
ioPage.setErrorPage(false);
ioPage.updatePageType();
ioPage.setJSPName("TestJSPPage"); // NOI18N
ioPage.setSubmitURL(ioPage.getJSPName()+".jsp"); // NOI18N
ioPage.setErrorURL(errorPage.getJSPName()+".jsp"); // NOI18N
ioPage.setSubmitButtonLabel("Test Submit"); // NOI18N
ioPage.setOverwrite(true);
ioPage.saveToFile();
}catch(Exception ex) { Debug.print(ex);}
}
}
}